﻿#region using
using ibba.src.DataAccess;
using System.Data;
using ibba.src.global;
using System.Collections.Generic;
using ibba.src.norisk.BusinessEntities;
using System;
#endregion

/*****************************************************************************************************************          
 Copyright © 2010 - Banco Itaú BBA S.A          
          
 TetoMitigacaoDB 
            
 Histórico de Alterações:      
  29/07/2010 - Leandra Mara Madureira - OS393398
  12/08/2010 - Raquel Pinheiro - Alterações - OS393398
  28/10/2010 - Aline Abreu Alves (AAALVES)	- Alteracao OS423540 
 *****************************************************************************************************************/

namespace ibba.src.norisk.DataAccess
{
    public class TetoMitigacaoDb : DataAccessBase
    {
        /// <summary>
        /// Retorna os campos dos TetoMitigacao
        /// 28/10/2010 - Aline Abreu Alves (AAALVES)	- Alteracao OS423540 
        /// </summary>
        public List<TetoMitigacao> ObterTetoMitigacao(int codInstrumento, int? codBem, int? codNatureza)
        {
            TetoMitigacao oTetoMitigacao = new TetoMitigacao();
            List<TetoMitigacao> listTetoMitigacao = new List<TetoMitigacao>();
            List<IDataParameter> parametros = new List<IDataParameter>();
            IDataReader rdr;
            int i = 0;
            AcessoDadosHelper oAcessoDadosHelper = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);

            if (codInstrumento > 0)
                parametros.Add(AcessoDadosHelper.CriarParametro("@CD_INSTRUMENTO", DbType.Int32, codInstrumento));
            else
                parametros.Add(AcessoDadosHelper.CriarParametro("@CD_INSTRUMENTO", DbType.Int32, null));

            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_BEM", DbType.Int32, codBem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_NATUREZA", DbType.Int32, codNatureza));

            rdr = oAcessoDadosHelper.ExecuteReader(CommandType.StoredProcedure,
                                                    "dbo.SRCP_OBTER_TETO_MITIGACAO",
                                                    parametros);

            while (rdr.Read())
            {
                oTetoMitigacao = new TetoMitigacao();

                string utilizar = (string)ObterValor(rdr, "CD_UTILIZAR").ToString();

                switch (utilizar)
                {
                    case "0":
                        oTetoMitigacao.Utilizar = "EAD";
                        break;
                    case "1":
                        oTetoMitigacao.Utilizar = "LIMITE";
                        break;
                    case "2":
                        oTetoMitigacao.Utilizar = "AMBOS";
                        break;
                    case "3":
                        oTetoMitigacao.Utilizar = "NENHUM";
                        break;
                }

                oTetoMitigacao.id = (int)i;
                oTetoMitigacao.CodInstrumento = (int)ObterValor(rdr, "CD_INSTRUMENTO");
                oTetoMitigacao.DscInstrumento = (string)ObterValor(rdr, "DS_INSTRUMENTO");
                oTetoMitigacao.CodBem = (int)ObterValor(rdr, "CD_BEM");
                oTetoMitigacao.DscBem = (string)ObterValor(rdr, "DS_BEM");
                oTetoMitigacao.CodNatureza = (int)ObterValor(rdr, "CD_NATUREZA");
                oTetoMitigacao.DscNatureza = (string)ObterValor(rdr, "DS_NATUREZA");
                oTetoMitigacao.PercTetoMitigacao = (decimal)ObterValor(rdr, "PC_TETO_MITIGACAO");
                oTetoMitigacao.PercHE = (decimal)ObterValor(rdr, "PC_HE") * 100; // PARA EXIBIÇÃO COMO PERCENTUAL
                oTetoMitigacao.PercHV = (decimal)ObterValor(rdr, "PC_HV") * 100; // PARA EXIBIÇÃO COMO PERCENTUAL
                oTetoMitigacao.PercLMM = (decimal)ObterValor(rdr, "PC_LMM");
                oTetoMitigacao.Transfere = (string)ObterValor(rdr, "IC_TRANSFERE").ToString() == "0" ? "Não" : "Sim";
                oTetoMitigacao.Rating = (string)ObterValor(rdr, "IND_RATING").ToString() == "0" ? "Não" : "Sim";
                oTetoMitigacao.CodDominioGarantia = (int)ObterValor(rdr, "ID_DOMINIO_GARANTIA");
                listTetoMitigacao.Add(oTetoMitigacao);
                i = i + 1;
            }

            return listTetoMitigacao;
        }

        /// <summary>
        /// Atualiza o Teto Mitigacao
        /// </summary>
        /// <param name="XmlParametro">xml do parametro</param>
        /// <param name="CodUsuario">Codigo do Usuário</param>
        /// <returns></returns>
        public int AtualizarTetoMitigacao(string XmlParametro, string CodUsuario)
        {
            List<IDataParameter> parametros = new List<IDataParameter>();
            int iRetorno;

            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_USUARIO", DbType.String, CodUsuario));
            parametros.Add(AcessoDadosHelper.CriarParametro("@XML_PARAMETRO", DbType.String, XmlParametro));

            AcessoDadosHelper oAcessoDadosHelper = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);

            iRetorno = oAcessoDadosHelper.ExecuteScalar(CommandType.StoredProcedure,
                                         "dbo.SRCP_ATUALIZAR_TETO_MITIGACAO",
                                          parametros);
            return iRetorno;
        }

        /// <summary>
        /// Exclui o Teto Mitigacao
        /// </summary>
        /// <param name="CodInstrumento">cod instrumento</param>
        /// <param name="CodBem">Codigo do bem</param>
        /// <param name="CodNatureza">cod natureza</param>
        /// <param name="CodUsuario">Codigo do Usuário</param>
        /// <returns></returns>
        public int ExcluirTetoMitigacao(int CodInstrumento, int CodBem, int CodNatureza, string CodUsuario)
        {
            List<IDataParameter> parametros = new List<IDataParameter>();
            int retorno;

            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_INSTRUMENTO", DbType.Int32, CodInstrumento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_BEM", DbType.Int32, CodBem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_NATUREZA", DbType.Int32, CodNatureza));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_USUARIO", DbType.String, CodUsuario));

            AcessoDadosHelper oAcessoDadosHelper = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);

            retorno = oAcessoDadosHelper.ExecuteScalar(CommandType.StoredProcedure,
                                                        "dbo.SRCP_EXCLUIR_TETO_MITIGACAO",
                                                        parametros);

            return retorno;
        }

        /// <summary>
        /// Inserir o Teto Metigacao
        /// </summary>
        /// <param name="CodInstrumento">cod instrumento</param>
        /// <param name="CodBem">Codigo do bem</param>
        /// <param name="CodNatureza">cod natureza</param>
        /// <param name="PercTetoMitigacao">Percentual Teto de Mitigacao</param>
        /// <param name="CodUsuario">Codigo do Usuário</param>
        /// <returns></returns>
        public int InserirTetoMitigacao(int CodInstrumento, int CodBem, int CodNatureza, decimal PercTetoMitigacao, string CodUsuario)
        {
            List<IDataParameter> parametros = new List<IDataParameter>();
            int retorno;

            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_INSTRUMENTO", DbType.Int32, CodInstrumento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_BEM", DbType.Int32, CodBem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_NATUREZA", DbType.Int32, CodNatureza));
            parametros.Add(AcessoDadosHelper.CriarParametro("@PC_TETO_MITIGACAO", DbType.Decimal, PercTetoMitigacao));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_USUARIO", DbType.String, CodUsuario));

            AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);


            retorno = db.ExecuteScalar(CommandType.StoredProcedure,
                                      "dbo.SRCP_INSERIR_TETO_MITIGACAO",
                                      parametros);

            return retorno;
        }

        /// <summary>
        /// Verificar Teto Mitigacao
        /// </summary>
        /// <param name="CodInstrumento">cod instrumento</param>
        /// <param name="CodBem">Codigo do bem</param>
        /// <param name="CodNatureza">cod natureza</param>
        /// <returns></returns>
        public int VerificarTetoMitigacao(int CodInstrumento, int CodBem, int CodNatureza)
        {
            List<IDataParameter> parametros = new List<IDataParameter>();
            int retorno;

            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_INSTRUMENTO", DbType.Int32, CodInstrumento));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_BEM", DbType.Int32, CodBem));
            parametros.Add(AcessoDadosHelper.CriarParametro("@CD_NATUREZA", DbType.Int32, CodNatureza));

            AcessoDadosHelper db = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);

            retorno = db.ExecuteScalar(CommandType.StoredProcedure,
                                       "dbo.SRCP_VERIFICAR_TETO_MITIGACAO",
                                       parametros);
            return retorno;
        }

        //public List<TetoMitigacao> ListarTetoMitigacaoLog()
        public Retorno ListarTetoMitigacaoLog()
        {
            Retorno retorno = new Retorno();
            List<TetoMitigacao> listTetoMitigacao = new List<TetoMitigacao>();
            List<InstrumentoLog> listInstrumento = new List<InstrumentoLog>();
            List<IDataParameter> parametros = new List<IDataParameter>();
            AcessoDadosHelper oAcessoDadosHelper = new AcessoDadosHelper(GlobalInfo.SISTEMA, GlobalInfo.LOCAL);

            IDataReader rdr = oAcessoDadosHelper.ExecuteReader(CommandType.StoredProcedure,
                                                   "dbo.SRCP_LISTAR_TETO_MITIGACAO_LOG",
                                                   parametros);

            while (rdr.Read())
            {
                TetoMitigacao oTetoMitigacao = new TetoMitigacao();

                oTetoMitigacao.CodDominioGarantia = (int)ObterValor(rdr, "ID_DOMINIO_GARANTIA");
                oTetoMitigacao.DscInstrumento = (string)ObterValor(rdr, "DS_INSTRUMENTO");
                oTetoMitigacao.DscBem = (string)ObterValor(rdr, "DS_BEM");
                oTetoMitigacao.DscNatureza = (string)ObterValor(rdr, "DS_NATUREZA");
                oTetoMitigacao.DscParametro = (string)ObterValor(rdr, "NM_PARAMETRO_GARANTIA");
                oTetoMitigacao.VlrParametro = (string)ObterValor(rdr, "VL_PARAMETRO");
                oTetoMitigacao.CodUsuario = (string)ObterValor(rdr, "CD_USUARIO");
                oTetoMitigacao.DatAlteracao = (DateTime)ObterValor(rdr, "DT_LOG");
                listTetoMitigacao.Add(oTetoMitigacao);
            }

            if (rdr.NextResult())
            {
                while (rdr.Read())
                {
                    InstrumentoLog instrumento = new InstrumentoLog();
                    instrumento.CodInstrumento = (int)ObterValor(rdr, "CD_INSTRUMENTO");
                    instrumento.DscInstrumento = (string)ObterValor(rdr, "DS_INSTRUMENTO");
                    instrumento.Transfere = (string)ObterValor(rdr, "IC_TRANSFERE").ToString() == "0" ? "Não" : "Sim";
                    instrumento.CodUsuario = (string)ObterValor(rdr, "CD_USUARIO");
                    instrumento.DatAlteracao = (DateTime)ObterValor(rdr, "DT_LOG");
                    listInstrumento.Add(instrumento);
                }
            }

            retorno.ListInstrumento = listInstrumento;
            retorno.ListTetoMitigacao = listTetoMitigacao;

            return retorno;
        }
    }
}